// EZPZ Tooltip v1.0; Copyright (c) 2009 Mike Enriquez, http://theezpzway.com; Released under the MIT License
(function($){
    $.fn.ezpz_tooltip=function(options){
        var settings=$.extend({},$.fn.ezpz_tooltip.defaults,options);
        return this.each(function(){
            var content=$("#"+getContentId(this.id));
            var targetMousedOver=$(this).mouseover(function(){
                settings.beforeShow(content,$(this))
                }).mousemove(function(e){
                contentInfo=getElementDimensionsAndPosition(content);
                targetInfo=getElementDimensionsAndPosition($(this));
                contentInfo=$.fn.ezpz_tooltip.positions[settings.contentPosition](contentInfo,e.pageX,e.pageY,settings.offset,targetInfo);
                contentInfo=keepInWindow(contentInfo);
                content.css('top',contentInfo['top']);
                content.css('left',contentInfo['left']);
                settings.showContent(content)
                });
            if(settings.stayOnContent&&this.id!=""){
                $("#"+this.id+", #"+getContentId(this.id)).mouseover(function(){
                    content.css('display','block')
                    }).mouseout(function(){
                    content.css('display','none');
                    settings.afterHide()
                    })
                }else{
                targetMousedOver.mouseout(function(){
                    settings.hideContent(content);
                    settings.afterHide()
                    })
                }
            });
    function getContentId(targetId){
        if(settings.contentId==""){
            var name=targetId.split('-')[0];
            var id=targetId.split('-')[2];
            return name+'-content-'+id
            }else{
            return settings.contentId
            }
        };
    
function getElementDimensionsAndPosition(element){
    var height=element.outerHeight(true);
    var width=element.outerWidth(true);
    var top=$(element).offset().top;
    var left=$(element).offset().left;
    var info=new Array();
    info['height']=height;
    info['width']=width;
    info['top']=top;
    info['left']=left;
    return info
    };
    
function keepInWindow(contentInfo){
    var windowWidth=$(window).width();
    var windowTop=$(window).scrollTop();
    var output=new Array();
    output=contentInfo;
    if(contentInfo['top']<windowTop){
        output['top']=windowTop
        }
        if((contentInfo['left']+contentInfo['width'])>windowWidth){
        output['left']=windowWidth-contentInfo['width']
        }
        if(contentInfo['left']<0){
        output['left']=0
        }
        return output
    }
};

$.fn.ezpz_tooltip.positionContent=function(contentInfo,mouseX,mouseY,offset,targetInfo){
    contentInfo['top']=mouseY-offset-contentInfo['height'];
    contentInfo['left']=mouseX+offset;
    return contentInfo
    };
    
$.fn.ezpz_tooltip.positions={
    aboveRightFollow:function(contentInfo,mouseX,mouseY,offset,targetInfo){
        contentInfo['top']=mouseY-offset-contentInfo['height'];
        contentInfo['left']=mouseX+offset;
        return contentInfo
        }
    };

$.fn.ezpz_tooltip.defaults={
    contentPosition:'aboveRightFollow',
    stayOnContent:false,
    offset:10,
    contentId:"",
    beforeShow:function(content){},
    showContent:function(content){
        content.show()
        },
    hideContent:function(content){
        content.hide()
        },
    afterHide:function(){}
}
})(jQuery);
(function($){
    $.fn.ezpz_tooltip.positions.aboveFollow=function(contentInfo,mouseX,mouseY,offset,targetInfo){
        contentInfo['top']=mouseY-offset-contentInfo['height'];
        contentInfo['left']=mouseX-(contentInfo['width']/2);
        return contentInfo
        };
        
    $.fn.ezpz_tooltip.positions.rightFollow=function(contentInfo,mouseX,mouseY,offset,targetInfo){
        contentInfo['top']=mouseY-(contentInfo['height']/2);
        contentInfo['left']=mouseX+offset;
        return contentInfo
        };
        
    $.fn.ezpz_tooltip.positions.belowRightFollow=function(contentInfo,mouseX,mouseY,offset,targetInfo){
        contentInfo['top']=mouseY+offset;
        contentInfo['left']=mouseX+offset;
        return contentInfo
        };
        
    $.fn.ezpz_tooltip.positions.belowFollow=function(contentInfo,mouseX,mouseY,offset,targetInfo){
        contentInfo['top']=mouseY+offset;
        contentInfo['left']=mouseX-(contentInfo['width']/2);
        return contentInfo
        };
        
    $.fn.ezpz_tooltip.positions.aboveStatic=function(contentInfo,mouseX,mouseY,offset,targetInfo){
        contentInfo['top']=targetInfo['top']-offset-contentInfo['height'];
        contentInfo['left']=(targetInfo['left']+(targetInfo['width']/2))-(contentInfo['width']/2);
        return contentInfo
        };
        
    $.fn.ezpz_tooltip.positions.rightStatic=function(contentInfo,mouseX,mouseY,offset,targetInfo){
        contentInfo['top']=(targetInfo['top']+(targetInfo['height']/2))-(contentInfo['height']/2);
        contentInfo['left']=targetInfo['left']+targetInfo['width']+offset;
        return contentInfo
        };
        
    $.fn.ezpz_tooltip.positions.belowStatic=function(contentInfo,mouseX,mouseY,offset,targetInfo){
        contentInfo['top']=targetInfo['top']+targetInfo['height']+offset;
        contentInfo['left']=(targetInfo['left']+(targetInfo['width']/2))-(contentInfo['width']/2);
        return contentInfo
        }
    })(jQuery);